import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import basicRoutes from './basic'
import setRouterGuard from './guard'

const modules:any = import.meta.glob('./modules/**/*.ts', { eager: true })
const routeModules = [] as any
Object.keys(modules).forEach(key => {
  const mod = modules[key].default ?? {}
  const modList = Array.isArray(mod) ? [...mod] : [mod]
  routeModules.push(...modList)
})

/**
 * 路由 meta 配置说明
 *
 * title: String                       路由菜单显示的文本。
 * icon: String                        路由菜单显示的图标，注意 需配合菜单图标来源配置使用。
 * orderNo: Number                     路由模块排序，数值越小越靠前。(默认为 0)
 * hidden: Boolean                     如果设置为 true ，则会在导航菜单中不显示该菜单（默认 false）。
 * roles: Array                        路由角色，默认任何角色可访问。只在前端权限下有效。
 * alwaysShow: Boolean                 如果设置为 true ，在嵌套模式下会始终显示菜单（默认 false）；
 *                                     默认情况，如果子菜单只有一个，将不会显示父级。
 * activeParent: Boolean | String      如果设置为 true ，则会在面包屑导航中激活当前菜单的父级（默认 false）；
 *                                     也可以填写当前路由的父级 name 属性，还可以填写其它可以作为父级路由的 name 属性，
 *                                     该情况适用于详情页面。
 * affix                               如果为 true, 则会在标签选项中固定
 * hideTab                             如果为 true, 则不会在标签选项中显示
 * keepAlive                           如果为 true, 则会缓存页面, 默认 false; (配合全局缓存配置使用)
 * ignoreKeepAlive                     如果为 true, 则会取消页面缓存, 默认 false; (配合全局缓存配置使用)
 *
 */

const rootRoutes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'ROOT',
    redirect: '/home'
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes: [...rootRoutes, ...basicRoutes]
})

setRouterGuard(router)

export const asyncRoutes = routeModules

export default router
